package com.zxy.ziems.common.pojo.modbus;

import com.zxy.ziems.common.pojo.enums.DataEnum;
import com.zxy.ziems.common.validation.InEnum;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

/**
 * modbus的设备属性配置
 * @author 10348359
 * @create 2024-03-25 23:01
 */
@Data
public class DevicePropertyConfigModbus {
    /**
     * 功能码
     * 01 读取线圈状态 取得一组逻辑线圈的当前状态（ON/OFF)
     * 02 读取输入状态  取得一组开关输入的当前状态(ON/OFF)
     * 03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值
     * 04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值
     * 05 强置单线圈 强置一个逻辑线圈的通断状态
     * 06 预置单寄存器 放置一个特定的二进制值到一个单寄存器中
     * 07 读取异常状态 取得8个内部线圈的通断状态
     * 15 强置多线圈 强置一串连续逻辑线圈的通断
     * 16 预置多寄存器 放置一系列特定的二进制值到一系列多寄存器中
     * 17 报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态
     */
    @NotNull(message = "功能码不能为空")
    private Integer functionCode;

    /**
     * 起始地址
     */
    @NotNull(message = "起始地址不能为空")
    private Integer startAddress;

    /**
     * 长度
     */
    @NotNull(message = "字节长度不能为空")
    private Integer quantity;

    /**
     * 数据类型
     * long int
     */
    @InEnum(value = DataEnum.class)
    private String type;

    /**
     *
     * 字节偏移量
     */
    @Min(value = 0, message = "字节偏移量不能小于0")
    private Integer byteOffset = 0;

    /**
     *
     * 位偏移量
     */
    @Min(value = 0, message = "位偏移量不能小于0")
    @Max(value = 7, message = "位偏移量不能大于7")
    private Integer bitOffset = 0;

    /**
     * 是否为小端模式，默认false
     */
    private boolean littleEndian = false;

}
